// 公式1：1-先完成功能、2-写空函数、3-将1放到2里面、3-微调
// 公式2：固定逻辑不写函数，非巩固逻辑写函数



/**
 * 发送get异步请求
 * @param {string} url 请求地址
 * @param {object} params 请求参数 🌰 { 参数名:数据,...,参数名:数据}
 * @param {function} callback 回调函数
 * @param {string|undefined} type 数据类型
 * @param {object} headers 自定义请求头
 * @return undefined
 */
function get(url, params, callback, type, headers={}) 
{
    // let callback = res => {
    // }
    // 一、创建xhr对象
    const xhr = new XMLHttpRequest
    // 二、监控请求状态
    xhr.onreadystatechange = () => {
        // 返回
        if (xhr.readyState === 4)
        {
            // 成功
            if (xhr.status === 200)
            {
                // 获取数据  result 
                // let res = JSON.parse(xhr.responseText)
                let res = xhr.responseText
                if (type==='json') res = JSON.parse(xhr.responseText)
                // 逻辑处理
                // 百度搜索
                // 看电影
                callback(res)
            } else {
                console.log('瑕疵：', xhr.status)
            }
        }
    }
    // 三、设置请求方式、请求地址
    // 3.1 定义空数组  []
    let temp = []
    // 3.2 遍历对象for in key键 params[key]数据
    for (let key in params)
    {
        // 3.3 将数据按照 `键=值`格式push到数组中
        // temp.push(`${key}=${params.key}`)
        temp.push(`${key}=${params[key]}`)
    }
    // 3.4 最后数组变字符串 &    temp.join('&')

    // xhr.open('get', 请求地址?请求参数)
    // xhr.open('get', `${url}?${params}`)
    xhr.open('get', `${url}?${temp.join('&')}`)

    for (let key in headers)
    {
        // xhr.setRequestHeader(key, headers.key)
        xhr.setRequestHeader(key, headers[key])
    }

    // 四、发送请求
    xhr.send(null)
}

// 百度搜索
// get(地址1，参数1， res => {

// }) 
// 看电影
// get(地址2，参数2, res => {

// }) 



/**
 * 发送post异步请求
 * @param {string} url 请求地址
 * @param {string} params 请求参数 🌰 参数名=数据&...&参数名=数据
 * @param {function} callback 回调函数
 * @return undefined
 */
 function post(url, params, callback) 
 {
     // let callback = res => {
     // }
     // 一、创建xhr对象
     const xhr = new XMLHttpRequest
     // 二、监控请求状态
     xhr.onreadystatechange = () => {
         // 返回
         if (xhr.readyState === 4)
         {
             // 成功
             if (xhr.status === 200)
             {
                 // 获取数据  result 
                 let res = JSON.parse(xhr.responseText)
                 // 逻辑处理
                 // 百度搜索
                 // 看电影
                 callback(res)
             } else {
                 console.log('瑕疵：', xhr.status)
             }
         }
     }
     // 三、设置请求方式、请求地址
     xhr.open('post', `${url}`)
     xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
     // 四、发送请求
     xhr.send(params)
 }